home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xarchie-2.0.9 / atalloc.c < prev    next >
C/C++ Source or Header  |  1995-06-18  |  2KB  |  97 lines

  1. /*
  2.  * Copyright (c) 1989, 1990 by the University of Washington
  3.  *
  4.  * For copying and distribution information, please see the file
  5.  * <copyright.h>.
  6.  *
  7.  * v1.1.2 - gf  11/02/91 - renamed ZERO() to BZERO() for X
  8.  */
  9.  
  10. #include <copyright.h>
  11. #include <stdio.h>
  12.  
  13. #include <pfs.h>
  14. #include "config.h"    /* gf */
  15. #include "stringdefs.h"    /* for correct definition of bzero, used by BZERO */
  16.  
  17. static PATTRIB    lfree = NULL;
  18. int        pattrib_count = 0;
  19. int        pattrib_max = 0;
  20.  
  21. /*
  22.  * atalloc - allocate and initialize vlink structure
  23.  *
  24.  *    ATALLOC returns a pointer to an initialized structure of type
  25.  *    PATTRIB.  If it is unable to allocate such a structure, it
  26.  *    returns NULL.
  27.  */
  28. PATTRIB
  29. atalloc()
  30.     {
  31.     PATTRIB    at;
  32.     if(lfree) {
  33.         at = lfree;
  34.         lfree = lfree->next;
  35.     }
  36.     else {
  37.         at = (PATTRIB) malloc(sizeof(PATTRIB_ST));
  38.         if (!at) return(NULL);
  39.         pattrib_max++;
  40.     }
  41.  
  42.     pattrib_count++;
  43.  
  44.     BZERO(at);
  45.     /* Initialize and fill in default values; all items are
  46.        0 [or NULL] save precedence */
  47.     at->precedence = ATR_PREC_OBJECT;
  48.  
  49.     return(at);
  50.     }
  51.  
  52. /*
  53.  * atfree - free a PATTRIB structure
  54.  *
  55.  *    ATFREE takes a pointer to a PATTRRIB structure and adds it to
  56.  *    the free list for later reuse.
  57.  */
  58. void
  59. atfree(at)
  60.     PATTRIB    at;
  61.     {
  62.     if(at->aname) stfree(at->aname);
  63.  
  64.     if((strcmp(at->avtype,"ASCII") == 0) && at->value.ascii) 
  65.         stfree(at->value.ascii);
  66.     if((strcmp(at->avtype,"LINK") == 0) && at->value.link) 
  67.         vlfree(at->value.link);
  68.     
  69.     if(at->avtype) stfree(at->avtype);
  70.  
  71.     at->next = lfree;
  72.     at->previous = NULL;
  73.     lfree = at;
  74.     pattrib_count--;
  75.     }
  76.  
  77. /*
  78.  * atlfree - free a PATTRIB structure
  79.  *
  80.  *    ATLFREE takes a pointer to a PATTRIB structure frees it and any linked
  81.  *    PATTRIB structures.  It is used to free an entrie list of PATTRIB
  82.  *    structures.
  83.  */
  84. void
  85. atlfree(at)
  86.     PATTRIB    at;
  87.     {
  88.     PATTRIB    nxt;
  89.  
  90.     while(at != NULL) {
  91.         nxt = at->next;
  92.         atfree(at);
  93.         at = nxt;
  94.     }
  95.     }
  96.  
  97.